/**
 * Esta clase representa a los test de las
 * ventas con cuenta corrientes en productos.
 */
package ventas;

import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.*;

import org.junit.Before;
import org.junit.Test;

import exceptions.VentaYaAbonadaException;
import exceptions.VentasException;

/**
 * @author lucas
 *
 */
public class VentaConCuentaCorrienteEnProductosTest extends VentaTest {

	@Before
	public void setUp() throws Exception {
		super.setUp();
		this.setSut(new VentaConCuentaCorrienteEnProductos(
				super.getListaDeComprasDelCliente(),
				super.getSucursalDeLACompra(),
				super.getClienteQueRealizaLaCompra()));
		when(this.getClienteQueRealizaLaCompra().puedePagarLosProductosDesdeCCProductos(
				this.getSut().getProductosQueDeseaComprar())).thenReturn(true);
	}
	
	/**
	 * Este test demuestra que no se cumplen los requisitos
	 * para poder realizar la compra por que no alcanza la plata
	 * que el cliente ofrece para pagar los productos.
	 * @throws VentaYaAbonadaException 
	 */
	@Override
	@Test
	public void noSeCumplenLosRequisitosParaRealizarLaCompraNoAlcanzaTest() throws VentaYaAbonadaException{
		when(this.getClienteQueRealizaLaCompra().puedePagarLosProductosDesdeCCProductos(
				this.getSut().getProductosQueDeseaComprar())).thenReturn(false);
		super.noSeCumplenLosRequisitosParaRealizarLaCompraNoAlcanzaTest();
	}
	
	/**
	 * este test demuestra que el cliente no puede pagar
	 * los productos para realizar la compra.
	 * @throws VentaYaAbonadaException 
	 */
	@Test
	public void elClienteNoPuedePagarTest() throws VentaYaAbonadaException{
		when(this.getClienteQueRealizaLaCompra().puedePagarLosProductosDesdeCCProductos(
				this.getSut().getProductosQueDeseaComprar())).thenReturn(false);
		super.elClienteNoPuedePagarTest();
	}
	
	/**
	 * Este test demuestra la capacidad de no poder realizar
	 * una compra con exito.
	 * @throws VentasException 
	 */
	@Test(expected = VentasException.class) 
	public void noSepudoRealizarCompraTest() throws VentasException {
		when(this.getClienteQueRealizaLaCompra().puedePagarLosProductosDesdeCCProductos(
				this.getSut().getProductosQueDeseaComprar())).thenReturn(false);
		super.noSepudoRealizarCompraTest();
	}
	
	/**
	 * Este test verifica que se haya creado un ticket con el monto apropiado
	 * por la compra.
	 * 
	 * @throws VentasException 
	 */
	@Override
	@Test
	public void ticketApropiadoTest() throws VentasException{
		this.getSut().realizarCompra();
		assertEquals(0, this.getSut().getTicketDeVenta().getPrecio(), 0.002F);
	}
	
}
